问题
Java一共有三种可抛出结构:受检的异常、运行时异常(Runtime Exception)和错误(Error)。那么,这三种异常结构的使用场景是什么?
答案
受检的异常
如果期望调用者能够在适当的情况下进行恢复,则使用可受检的异常,让调用者在catch中进行捕获或者继续throws出去。常见的受检异常有
- ClassNotFoundException : 找不到类或接口所产生的异常;
- CloneNotSupportedException : 使用对象的 clone( )方法但无法执行 Cloneable所产生的异常;
- IllegalAccessException : 类定义不明确所产生的异常;
- InstantiationException : 使用 newInstance( )方法试图建立一个类 instance时所产生的异常;
- InterruptedException : 目前线程等待执行,另一线程中断目前线程所产生的异常。
运行时异常
运行时异常通常用来表明程序错误,大多数运行时异常是指前提条件违例,API提供方和API调用方没有遵守双方的约定,比如在访问数组时,访问的索引超过了数组的长度就会出现ArrayIndexOutOfBoundsException。如果,不想调用者恢复异常情况,则可以抛出运行时异常。常见的运行时异常有ArithmeticException、ArrayStoreException、ArrayIndexOutOfBoundsException等等。
错误
Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,比如,内存资源不足、操作系统出错。在大多数情况下,当遇到这样的错误时,建议让该程序中断。这样的异常超出了程序可控制的范围。
结论
Java异常体系中一共有三种异常结构,应该根据具体的使用场景选择合适的异常,而不是胡乱使用。